package main
import (
	"fmt"
)
type Describer interface {
    Describe()
}
type Person struct {
    name string
    age int
}
func (p Person) Describe() {    //使用值接受者实现
    fmt.Printf("%s is %d years old\n", p.name, p.age)
}
type Address struct {
    state string
    country string
}
func (a *Address) Describe() {  //使用指针接受者实现、
    fmt.Printf("State %s Country %s", a.state, a.country)
}


// 19. 接口（二） 实现接口：指针接受者与值接受者
func main(){
    var d1 Describer
    p1 := Person{"yanghao", 18}
    d1 = p1
    d1.Describe()
    p2 := Person{"yangxiaohao", 17}
    d1 = &p2
    d1.Describe()

    var d2 Describer
    a := Address{"还好", "中国"}
    // d2 = a //错误
    d2 = &a
    d2.Describe()

}
